// /utils/time.js

/**
 * [时间工具] - 对小于10的数字进行补零
 * @param {number | string} num - 需要补零的数字
 * @returns {string} - 补零后的字符串
 */
const padZero = (num) => {
  return num < 10 ? '0' + num : String(num);
};

/**
 * [时间工具] - 判断一个日期字符串是否是今天
 * @param {string} dateStr - 格式为 'YYYY-MM-DD' 的日期字符串
 * @returns {boolean} - 如果是今天则返回 true，否则返回 false
 */
const isToday = (dateStr) => {
  if (!dateStr) return false;
  const today = new Date();
  const todayFormatted = `${today.getFullYear()}-${padZero(today.getMonth() + 1)}-${padZero(today.getDate())}`;
  return dateStr === todayFormatted;
};

/**
 * [时间工具] - 生成从今天起的未来N天日期数据
 * @param {number} count - 需要生成的天数，默认为7天
 * @returns {Array<object>} - 包含日期信息的对象数组
 */
const generateFutureDates = (count = 7) => {
  const dates = [];
  const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
  for (let i = 0; i < count; i++) {
    const date = new Date();
    date.setDate(date.getDate() + i);
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const day = date.getDate();
    dates.push({
      fullDate: `${year}-${padZero(month)}-${padZero(day)}`,
      weekday: i === 0 ? '今天' : weekdays[date.getDay()],
      day: padZero(day),
      month: `${month}月`
    });
  }
  return dates;
};

/**
 * [时间工具] - 生成一天从 00:00 到 24:00 的所有半小时时间段
 * @returns {Array<object>} - 包含时间段信息的对象数组
 */
const generateTimeSlots = () => {
  const slots = [];
  for (let i = 0; i < 48; i++) {
    const hour = Math.floor(i / 2);
    const minute = (i % 2) * 30;
    const startTime = `${padZero(hour)}:${padZero(minute)}`;
    let endTimeLabel, endTimeValue;
    
    // 特殊处理最后一个时间段 "23:30 - 24:00"
    if (i === 47) {
      endTimeLabel = "24:00"; // 用于UI显示
      endTimeValue = "00:00"; // 用于跨天逻辑计算
    } else {
      const nextHour = minute === 30 ? hour + 1 : hour;
      const nextMinute = minute === 30 ? 0 : 30;
      const formattedEndTime = `${padZero(nextHour)}:${padZero(nextMinute)}`;
      endTimeLabel = formattedEndTime;
      endTimeValue = formattedEndTime;
    }

    slots.push({
      label: `${startTime} - ${endTimeLabel}`, // e.g., "08:30 - 09:00"
      startTime: startTime, // e.g., "08:30"
      endTime: endTimeValue,   // e.g., "09:00" 或 "00:00"
      status: 'available'  // 初始状态为可选
    });
  }
  return slots;
};

/**
 * [时间工具] - 计算两个时间点之间的时长，并格式化为 HH:mm:ss
 * @param {Date} startTime - 开始时间的Date对象
 * @param {Date} endTime - 结束时间的Date对象 (默认为当前时间)
 * @returns {string} - 格式化后的时长字符串, e.g., "01:23:45"
 */
const formatDuration = (startTime, endTime = new Date()) => {
  if (!(startTime instanceof Date) || !(endTime instanceof Date)) {
    return '00:00:00';
  }
  
  // 计算总秒数差
  const diffInSeconds = Math.round((endTime - startTime) / 1000);
  if (diffInSeconds < 0) return '00:00:00'; // 防止时间为负

  // 换算为时、分、秒
  const hours = Math.floor(diffInSeconds / 3600);
  const minutes = Math.floor((diffInSeconds % 3600) / 60);
  const seconds = diffInSeconds % 60;

  // 使用 padZero 补零并返回
  return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`;
};

// 统一导出所有工具函数
export {
  padZero,
  isToday,
  generateFutureDates,
  generateTimeSlots,
  formatDuration
};